package cn.iocoder.yudao.module.enterprise.service.company;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.enterprise.controller.admin.company.vo.*;
import cn.iocoder.yudao.module.enterprise.dal.dataobject.company.EnterpriseCompanyDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 企业信息 Service 接口
 *
 * @author 谭万全
 */
public interface EnterpriseCompanyService {

    /**
     * 创建企业信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCompany(@Valid CompanyCreateReqVO createReqVO);

    /**
     * 更新企业信息
     *
     * @param updateReqVO 更新信息
     */
    void updateCompany(@Valid CompanyUpdateReqVO updateReqVO);

    void updateCompanyIsRealName(Long id,String isRealName);
    /**
     * 删除企业信息
     *
     * @param id 编号
     */
    void deleteCompany(Long id);

    /**
     * 获得企业信息
     *
     * @param id 编号
     * @return 企业信息
     */
    EnterpriseCompanyDO getCompany(Long id);

    /**
     * 获得企业信息
     *
     * @param id 编号
     * @return 企业信息
     */
    EnterpriseCompanyDO getCompanyByphone(String phone);
    /**
     * 获得企业信息
     *
     * @param id 编号
     * @return 企业信息
     */
    EnterpriseCompanyDO getCompany(String cardNo,String phone,String userName);

    /**
     * 获得企业信息
     *
     * @param id 编号
     * @return 企业信息
     */
    EnterpriseCompanyDO  getCompanyByLoginUser(Long companyId);

    /**
     * 获得企业信息列表
     *
     * @param ids 编号
     * @return 企业信息列表
     */
    List<EnterpriseCompanyDO> getCompanyList(Collection<Long> ids);

    /**
     * 获得企业信息分页
     *
     * @param pageReqVO 分页查询
     * @return 企业信息分页
     */
    PageResult<EnterpriseCompanyDO> getCompanyPage(CompanyPageReqVO pageReqVO);

    /**
     * 获得企业信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 企业信息列表
     */
    List<EnterpriseCompanyDO> getCompanyList(CompanyExportReqVO exportReqVO);


    /**
     * 企业申请认证
     *
     * @param createReqVO
     * @return 企业id
     */
    EnterpriseCompanyDO applyAuthenticationCompany(@Valid CompanyCreateReqVO createReqVO);

    /**
     * 修改手机
     * @return
     */
    void updatePhone(CompanyUpdatePhoneReqVO reqVO);

    /**
     * 去重校验
     * @param creditCode
     * @return
     */
    Boolean checkCreditCode(String  creditCode);

    /**
     * 去重校验
     * @return
     */
    Boolean isAuthentication(Long  tenantId);
}
